<?php

/**
 * @author Paweł Napieracz
 * @version 1.0
 */
class Helper_FlexiGridJSON {

    private $strona = 1;
    private $nazwaSort = 'id';
    private $kolejnoscSort = 'desc';
    private $przeszukiwanaKol = '';
    private $szukanyWyraz = '';
    private $liczbaRekordow = 10; //testowo
    private $wszystkieRekordy;

    /**
     * Konstruktor klasy FlexiGridJSON przygotowującej wyświetlanie danych w tabeli
     * FlexiGrid.
     * Funkcja pobiera z POST'a przesłanego przez FlexiGrid takie dane:
     * @uses <int> strona - aktualna strona
     * @uses <string> nazwaSort - nazwa po której sortujemy
     * @uses <string> kolejnoscSort - kolejność sortowania (asc/desc)
     * @uses <string> przeszukiwanaKol - kolumna w której szukamy
     * @uses <string> szukanyWyraz - szukany wyraz
     * @param <array> slownik //jszcze nie uzywane -> będzie służyć do zamiany np. status 1 na pokazuj
     */
    function __construct($slownik=null) {
        if (isset($_POST['page'])) {
            $this->strona = intval($_POST['page']);
        }
        if (isset($_POST['sortname'])) {
            $this->nazwaSort = $_POST['sortname'];
        }
        if (isset($_POST['sortorder'])) {
            $this->kolejnoscSort = $_POST['sortorder'];
        }
        if (isset($_POST['qtype'])) {
            $this->przeszukiwanaKol = $_POST['qtype'];
        }
        if (isset($_POST['query'])) {
            $this->szukanyWyraz = $_POST['query'];
        }
        if (isset($_POST['rp'])) {
            $this->liczbaRekordow = $_POST['rp'];
        }
    }

    /**
     * Zwraca liczbę od której należy wbrać wyniki (LIMIT od, ile)
     * @return <int>
     */
    public function getLimitOd() {
        return ($this->strona - 1) * $this->liczbaRekordow;
    }

    /**
     * Zwraca liczbę ile należy wybrać wyników (LIMIT od, ile)
     * @return <int>
     */
    public function getLimitIle() {
        return $this->liczbaRekordow;
    }

    /**
     * Metoda zwraca kolejność i pole po którym należy posortować wyniki
     * @return <string>
     */
    public function getSortowanie() {
        return $this->nazwaSort . ' ' . $this->kolejnoscSort;
    }

    /**
     * Zwraca where'a, który przeszuka i wypluje tylko wyniki pasujące
     * do podanej frazy
     * @return <array>
     */
    public function getPrzeszukaj() {
        return (!empty($this->przeszukiwanaKol) && !empty($this->szukanyWyraz)) ? array($this->przeszukiwanaKol => "%{$this->szukanyWyraz}%") : null;
    }

    /**
     * Wszystkie rekordy z danego zapytania (potrzebne do wyliczenia liczby stron)
     * @param <int> $count liczba rekordów
     */
    public function setWszystkie($count) {
        $this->wszystkieRekordy = intval($count);
    }

    /**
     * Metoda koduje dane i zwraca tablicę do obsługi JSONa po stronie FlexiGrid
     * @param <array> $rekordy rekordy
     * @param <array> $pola tablica z nazwami pól w przesłanych rekordach
     */
    public function kodujJSON($rekordy, $pola) {
        $dane = array();
        $dane['rows'] = array();
        $dane['page'] = $this->strona;
        $dane['total'] = $this->wszystkieRekordy;
        if ($rekordy !== false) {
            foreach ($rekordy as $v) {
                $komorki = array();
                //komórki
                foreach ($pola as $pole) {
                    $komorki[] = $v->$pole;
                }
                //
                $dane['rows'][] = array(
                    'id' => $v->id,
                    'cell' => $komorki
                );
            }
        }
        echo json_encode($dane);
    }

    /**
     * Metoda pozwala zakodować dane do postaci JSON podająć własną tablicę rekordów
     * @param <array> $wiersze podana tablica tablic w postaci
     * ('id' => np. 1, 'cell' = array('wynikKol1','wynikKol2'))
     */
    public function kodujWlasnyJSON($wiersze) {
        $dane = array();
        $dane['rows'] = $wiersze;
        $dane['page'] = $this->strona;
        $dane['total'] = $this->wszystkieRekordy;
        echo json_encode($dane);
    }

}

?>
